iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0

明天就要上班了...

給自己一點安慰

不上白不上, 上了不白上

努力加油, 徵求自我介紹範例:)

今天要來看第一個Lab中的source跟所需的linker script

SECTIONS
{
  . = 0x80000;
  .text : { *(.text) }
}

這裡因為aarch64架構的定義, 起始位置為0x80000
所以我們也把text段擺在這個位址上, CPU就可以直接銜接進入點

source

.section ".text"

.global _start

_start:
    wfe
    b _start

這裡可以看到我們定義了一個global的_start

這個_start symbol就被bound在GLOBAL上

這個點很關鍵, 因為我們必須定義好_start

才能讓CPU知道我們接下來要執行的代碼在哪裡

接下來我們就可以開始簡單用qemu模擬

qemu-system-aarch64 -M raspi3 -kernel kernel8.img -display none -serial null -serial stdio -S -s

這裡執行下去程序會暫時停止在第一個被執行的指令上

我們如何得知我們的程序順利被加載呢?

Bingo, 強大的GDB神器

$ gdb
$ (gdb) target remote :1234

可以看到我們的程序停在_start, 並且接著會持續循環無窮迴圈

以上得知, 我們的text段在linker script定義在0x80000開始.

並且進入我們撰寫的_start, 開始迴圈

Thanks
See u tomorrow

(引用圖源: 社畜人生加油 LINE貼圖)


上一篇
第4砍 - 蓄勢待發
下一篇
第6砍 - 提槍上陣
系列文
砍入式開發學習路線大雜燴8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言